package com.zp.self.module.level_4_算法练习.算法.排序.算法题;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * @author By ZengPeng
 */
public class 力扣_937_重新排列日志文件 {
    @Test
    public void main() {
        System.out.println((int)'0');
        System.out.println((int)'9');
        Solution solution = new 力扣_937_重新排列日志文件().new Solution();
        System.out.println(Arrays.toString(solution.reorderLogFiles(new String[]{"a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo","a2 act car"})));
    }

    /**
     题目：给你一个日志数组 logs。每条日志都是以空格分隔的字串，其第一个字为字母与数字混合的 标识符 。
         有两种不同类型的日志：

         字母日志：除标识符之外，所有字均由小写字母组成
         数字日志：除标识符之外，所有字均由数字组成
         请按下述规则将日志重新排序：

         所有 字母日志 都排在 数字日志 之前。
         字母日志 在内容不同时，忽略标识符后，按内容字母顺序排序；在内容相同时，按标识符排序。
         数字日志 应该保留原来的相对顺序。
         返回日志的最终顺序。

         示例 1：
         输入：logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
         输出：["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
         解释：
         字母日志的内容都不同，所以顺序为 "art can", "art zero", "own kit dig" 。
         数字日志保留原来的相对顺序 "dig1 8 1 5 1", "dig2 3 6" 。

         示例 2：
         输入：logs = ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]
         输出：["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]


     分析：【P 💖💖💖】
        1.双指针 + 对象 + 快排：数字日志 应该保留原来的相对顺序。
                             字母日志 在内容不同时，忽略标识符后，按内容字母顺序排序；在内容相同时，按标识符排序。
            --执行耗时:2 ms,击败了99.42% 的Java用户
            --编码耗时:[46:55]

     边界值 & 注意点：
        1.
     **/
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String[] reorderLogFiles(String[] logs) {
        int mark=logs.length-1;
        for (int i = mark; i >=0; i--) {
            String log = logs[i];
            char lastChar = log.charAt(log.length() - 1);
            if(lastChar>47 && lastChar<58){
                String temp = logs[mark];
                logs[mark--]=logs[i];
                logs[i]=temp;
            }
        }
        List<Log> list = new ArrayList<>();
        for (int i = 0; i <= mark; i++)
            list.add(new Log(logs[i]));
        list.sort((o1, o2) -> {
            int compareTo = o1.content.compareTo(o2.content);
            return compareTo==0? (o1.mark.compareTo(o2.mark)) : compareTo;
        });
        for (int i = 0; i <= mark; i++)
            logs[i] = list.get(i).log;
        return logs;
    }
}
class Log{
    public Log(String log) {
        this.log = log;
        this.content = log.substring(log.indexOf(' '));
        this.mark = log.substring(0,log.indexOf(' '));
    }


    public String log;
    public String content;
    public String mark;
}
//leetcode submit region end(Prohibit modification and deletion)

}